﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PlanoAulaHelper
{
    public partial class ConteudoPlanoAulaForm : FormEdicao
    {
        
        public ConteudoPlanoAulaForm(PlanoAulaCab pac) : base(pac.Id)
        {
            InitializeComponent();
        }
        private bool DiaCadastrado(DateTime data)
        {
            using (dbContext dc = new dbContext())
            {
                return (from p in dc.PlanoAulaDetalhes where p.IdPlanoAulaCab == this.IdItem && p.Data.Date == data.Date select p).Count() >= 1;
            }
        }
        private void toolStripButtonGerarDadosIniciais_Click(object sender, EventArgs e)
        {
            using (dbContext dc = new dbContext())
            {
                var planoAulaCab = (from p in dc.PlanoAulaCabs where p.Id == this.IdItem select p).Single();
                
                var resultadoDiasNaoUteis = (from dnu in dc.DiaNaoUtils select dnu);

                DateTime temp = planoAulaCab.De;
                while (temp.Date <= planoAulaCab.Ate.Date)
                {
                    bool diaValido = (from d in resultadoDiasNaoUteis
                                      where d.Data == temp.Date
                                      select d).Count() == 0;
                    bool diaMarcado = (from d in planoAulaCab.DiaAulas
                                       where d.Dia == (int)temp.DayOfWeek
                                       select d).Count() >= 1;
                    bool diaCadastrado = DiaCadastrado(temp);
                    if (!diaCadastrado && diaValido && diaMarcado) //cbxDiaAula.CheckedItems.Contains(temp.DayOfWeek) && DiaValido(temp))
                    {
                        PlanoAulaDetalhe pad = new PlanoAulaDetalhe{ Data = temp , IdPlanoAulaCab = planoAulaCab.Id};
                        planoAulaCab.PlanoAulaDetalhes.Add(pad);
                        //dc.PlanoAulaDetalhes.InsertOnSubmit(pad);
                        
                    }
                    temp = temp.AddDays(1);
                }
                dc.SubmitChanges();
            }
            AtualizarDados();
        }

        private void ConteudoPlanoAulaForm_Load(object sender, EventArgs e)
        {
            AtualizarDados();
        }
        private void AtualizarDados()
        {
            using (dbContext db = new dbContext())
            {
                planoAulaDetalheBindingSource.DataSource = from d in db.PlanoAulaDetalhes
                                                           where d.IdPlanoAulaCab == this.IdItem
                                                           orderby d.Data ascending
                                                           select d;
            }
        }
        private void toolStripButtonAtulizar_Click(object sender, EventArgs e)
        {
            AtualizarDados();
        }

        private void btnAtualizar_Click(object sender, EventArgs e)
        {
            if (cbxConfirmarAcao.Checked || MessageBox.Show("Confirma a atualização do item selecionado?", "Atualização", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                using (dbContext dc = new dbContext())
                {
                    var planoAulaCab = (from p in dc.PlanoAulaCabs where p.Id == this.IdItem select p).Single();
                    if (planoAulaDetalheBindingSource.Current == null)
                    {
                        btnAdicionarData_Click(sender, e);
                    }
                    int id = ((PlanoAulaDetalhe)planoAulaDetalheBindingSource.Current).Id;
                    var planoAulaDetalhe = (from p in planoAulaCab.PlanoAulaDetalhes
                                            where p.Id == id
                                            select p).Single();

                    planoAulaDetalhe.Data = edtData.Value;
                    planoAulaDetalhe.Conteudo = edtConteudoProgramatico.Text;
                    planoAulaDetalhe.Referencia = edtReferencia.Text;

                    dc.SubmitChanges();
                }
                AtualizarDados();
                if (planoAulaDetalheBindingSource.Position < planoAulaDetalheBindingSource.Count - 1)
                {
                    planoAulaDetalheBindingSource.MoveNext();
                    edtConteudoProgramatico.Focus();
                }
            }
        }

        private void btnAdicionarData_Click(object sender, EventArgs e)
        {
            using (dbContext dc = new dbContext())
            {
                var planoAulaCab = (from p in dc.PlanoAulaCabs where p.Id == this.IdItem select p).Single();

                PlanoAulaDetalhe pad = new PlanoAulaDetalhe { 
                    Data = edtData.Value, 
                    IdPlanoAulaCab = planoAulaCab.Id,
                    Conteudo = edtConteudoProgramatico.Text,
                    Referencia = edtReferencia.Text                    
                };
                planoAulaCab.PlanoAulaDetalhes.Add(pad);
                dc.SubmitChanges();
            }
            AtualizarDados();
        }

        private void btnExcluirData_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Confirma a exclusão do item selecionado?", "Exclusão", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                using (dbContext dc = new dbContext())
                {
                    int id = ((PlanoAulaDetalhe)planoAulaDetalheBindingSource.Current).Id;
                    var itemAula = (from i in dc.PlanoAulaDetalhes
                                    where i.Id == id
                                    select i).Single();
                    dc.PlanoAulaDetalhes.DeleteOnSubmit(itemAula);
                    dc.SubmitChanges();
                }
                AtualizarDados();
            }
        }

        private void toolStripButtonVisualizar_Click(object sender, EventArgs e)
        {   
            new relPlanoAulaForm(this.IdItem).ExbirFormulario(this);
        }

        private void dgvDados_SelectionChanged(object sender, EventArgs e)
        {
            if (planoAulaDetalheBindingSource.Current != null)
            {
                using (dbContext dc = new dbContext())
                {
                    var planoAulaCab = (from p in dc.PlanoAulaCabs where p.Id == this.IdItem select p).Single();
                    int id = ((PlanoAulaDetalhe)planoAulaDetalheBindingSource.Current).Id;
                    var planoAulaDetalhe = (from p in planoAulaCab.PlanoAulaDetalhes
                                            where p.Id == id
                                            select p).Single();
                    if (planoAulaDetalhe != null)
                    {
                        edtConteudoProgramatico.Text = planoAulaDetalhe.Conteudo;
                        edtReferencia.Text = planoAulaDetalhe.Referencia;
                        edtData.Value = planoAulaDetalhe.Data;
                    }
                }
            }
        }
    }
}
